<?xml version="1.0" encoding="UTF-8"?>
<xs:schema xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:tns="bbcom" targetNamespace="bbcom"
	elementFormDefault="qualified" attributeFormDefault="unqualified">
	<xs:include schemaLocation="BBCoMSchemaCommons.xsd"/>
	<xs:element name="AbstractInterface" type="tns:AbstractInterfaceType"/>
	<xs:element name="BBCoMInstance" type="tns:BBCoMInstanceType"/>
	<xs:element name="Deployment" type="tns:DeploymentType"/>
	<xs:element name="DeviceContainer" type="tns:DeviceContainerType"/>
	<xs:element name="PrimitiveComponent" type="tns:PrimitiveComponentType"/>
	<xs:complexType name="AbstractConnectorType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="AbstractInterfaceType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType">
				<xs:sequence>
					<xs:element name="Implementation" type="tns:ImplementationType" minOccurs="0"/>
				</xs:sequence>
				<xs:attribute name="name" type="xs:ID" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="AbstractProvidedRoleType">
		<xs:complexContent>
			<xs:extension base="tns:RoleType">
				<xs:sequence>
					<xs:element name="UserInterface" type="tns:UserInterfaceType" minOccurs="0"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="AbstractRequiredRoleType">
		<xs:complexContent>
			<xs:extension base="tns:RoleType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="AllocationType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType">
				<xs:attribute name="name" type="tns:NameDataType" use="required"/>
				<xs:attribute name="refDeployableEntity" type="xs:string" use="required"/>
				<xs:attribute name="refDeviceContainer" type="xs:string" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="BBCoMInstanceType">
		<xs:sequence>
			<xs:element name="Depository" type="tns:DepositoryType" minOccurs="0"/>
			<xs:element name="System" type="tns:SystemType" minOccurs="0" maxOccurs="1"/>
			<xs:element name="SystemUsage" type="tns:SystemUsageType" minOccurs="0"/>
			<xs:element name="DeviceEnvironment" type="tns:DeviceEnvironmentType" minOccurs="0"
				maxOccurs="1"/>
			<xs:element name="Deployment" type="tns:DeploymentType" minOccurs="0" maxOccurs="1"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="ChannelSinkConnectorType">
		<xs:complexContent>
			<xs:extension base="tns:AbstractConnectorType">
				<xs:sequence>
					<xs:element name="FilterRule" type="tns:FilterRuleType" minOccurs="0"/>
				</xs:sequence>
				<xs:attribute name="refEventChannel" type="xs:string" use="required"/>
				<xs:attribute name="refSinkRole" type="xs:string" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ChannelSourceConnectorType">
		<xs:complexContent>
			<xs:extension base="tns:AbstractConnectorType">
				<xs:attribute name="refSourceRole" type="xs:string" use="required"/>
				<xs:attribute name="refEventChannel" type="xs:string" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ComponentConfigurationType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType">
				<xs:attribute name="refComponentParameter" type="tns:NameDataType" use="required"/>
				<xs:attribute name="value" type="xs:string" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ComponentInstanceType">
		<xs:complexContent>
			<xs:extension base="tns:DeployableEntityType">
				<xs:sequence>
					<xs:element name="ComponentConfiguration" type="tns:ComponentConfigurationType"
						minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:attribute name="name" type="tns:NameDataType" use="required"/>
				<xs:attribute name="refComponent" type="xs:string" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ComponentParameterType">
		<xs:complexContent>
			<xs:extension base="tns:ParameterType">
				<xs:attribute name="levelUp" type="xs:string" use="optional"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ComponentType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType">
				<xs:sequence>
					<xs:element name="ProvidedRole" type="tns:ProvidedRoleType" minOccurs="0"
						maxOccurs="unbounded"/>
					<xs:element name="RequiredRole" type="tns:RequiredRoleType" minOccurs="0"
						maxOccurs="unbounded"/>
					<xs:element name="SinkRole" type="tns:SinkRoleType" minOccurs="0"
						maxOccurs="unbounded"/>
					<xs:element name="SourceRole" type="tns:SourceRoleType" minOccurs="0"
						maxOccurs="unbounded"/>
					<xs:element name="ComponentParameter" type="tns:ComponentParameterType"
						minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:attribute name="name" type="xs:ID" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="CompositeComponentType">
		<xs:complexContent>
			<xs:extension base="tns:ComponentType">
				<xs:sequence>
					<xs:element name="EventChannel" type="tns:EventChannelType" minOccurs="0"
						maxOccurs="unbounded"/>
					<xs:element name="ComponentInstance" type="tns:ComponentInstanceType"
						minOccurs="0" maxOccurs="unbounded"/>
					<xs:element name="Connector" type="tns:ConnectorType" minOccurs="0"
						maxOccurs="unbounded"/>
					<xs:element name="EventConnector" type="tns:EventConnectorType" minOccurs="0"
						maxOccurs="unbounded"/>
					<xs:element name="ChannelSourceConnector" type="tns:ChannelSourceConnectorType"
						minOccurs="0" maxOccurs="unbounded"/>
					<xs:element name="ChannelSinkConnector" type="tns:ChannelSinkConnectorType"
						minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ConnectorType">
		<xs:complexContent>
			<xs:extension base="tns:AbstractConnectorType">
				<xs:attribute name="refRequiredRole" type="xs:string" use="required"/>
				<xs:attribute name="refProvidedRole" type="xs:string" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DeployableEntityType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DeploymentType">
		<xs:sequence>
			<xs:element name="Allocation" type="tns:AllocationType" minOccurs="0"
				maxOccurs="unbounded"/>
			<xs:element name="Scenario" type="tns:ScenarioType" minOccurs="0"/>
		</xs:sequence>
		<xs:attribute name="refSystem" type="xs:string" use="required"/>
		<xs:attribute name="refDeviceEnvironment" type="xs:string" use="required"/>
	</xs:complexType>
	<xs:complexType name="DepositoryType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType">
				<xs:sequence>
					<xs:element name="Interface" type="tns:InterfaceType" minOccurs="0"
						maxOccurs="unbounded"/>
					<xs:element name="EventGroup" type="tns:EventGroupType" minOccurs="0"
						maxOccurs="unbounded"/>
					<xs:element name="PrimitiveComponent" type="tns:PrimitiveComponentType"
						minOccurs="0" maxOccurs="unbounded"/>
					<xs:element name="CompositeComponent" type="tns:CompositeComponentType"
						minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DeviceContainerType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType">
				<xs:sequence>
					<xs:element name="Properties" type="tns:PropertiesType" minOccurs="0"/>
					<xs:element name="ProcessingDevice" type="tns:ProcessingDeviceType"
						minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:attribute name="name" type="tns:NameDataType" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="DeviceEnvironmentType">
		<xs:sequence>
			<xs:element name="DeviceContainer" type="tns:DeviceContainerType" minOccurs="0"
				maxOccurs="unbounded"/>
			<xs:element name="LinkingDevice" type="tns:LinkingDeviceType" minOccurs="0"
				maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="name" type="xs:ID" use="required"/>
	</xs:complexType>
	<xs:complexType name="EventChannelType">
		<xs:complexContent>
			<xs:extension base="tns:DeployableEntityType">
				<xs:attribute name="name" type="tns:NameDataType" use="required"/>
				<xs:attribute name="refEventGroup" type="xs:string" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EventConnectorType">
		<xs:complexContent>
			<xs:extension base="tns:AbstractConnectorType">
				<xs:sequence>
					<xs:element name="FilterRule" type="tns:FilterRuleType" minOccurs="0"/>
				</xs:sequence>
				<xs:attribute name="refSourceRole" use="required" type="xs:string"/>
				<xs:attribute name="refSinkRole" use="required" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="EventGroupType">
		<xs:complexContent>
			<xs:extension base="tns:AbstractInterfaceType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="FilterRuleType">
		<xs:sequence>
			<xs:element name="Implementation" type="tns:ImplementationType" minOccurs="0"/>
		</xs:sequence>
	</xs:complexType>
	<xs:complexType name="InterfaceType">
		<xs:complexContent>
			<xs:extension base="tns:AbstractInterfaceType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="LinkingDeviceType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType">
				<xs:sequence>
					<xs:element name="Properties" type="tns:PropertiesType" minOccurs="0"/>
					<xs:element name="ConnectedDeviceContainer" type="tns:NameDataType"
						minOccurs="0" maxOccurs="unbounded"/>
				</xs:sequence>
				<xs:attribute name="name" type="tns:NameDataType" use="required"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ParameterType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType">
				<xs:attribute name="name" type="tns:NameDataType" use="required"/>
				<xs:attribute name="type" use="required">
					<xs:simpleType>
						<xs:restriction base="xs:string">
							<xs:enumeration value="bool"/>
							<xs:enumeration value="int"/>
							<xs:enumeration value="double"/>
							<xs:enumeration value="string"/>
							<xs:enumeration value="source code"/>
						</xs:restriction>
					</xs:simpleType>
				</xs:attribute>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="PrimitiveComponentType">
		<xs:complexContent>
			<xs:extension base="tns:ComponentType">
				<xs:sequence>
					<xs:element name="Implementation" type="tns:ImplementationType" minOccurs="0"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ProcessingDeviceType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType">
				<xs:sequence>
					<xs:element name="Properties" type="tns:PropertiesType" minOccurs="0"/>
				</xs:sequence>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="ProvidedRoleType">
		<xs:complexContent>
			<xs:extension base="tns:AbstractProvidedRoleType">
				<xs:attribute name="refInterface" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="RequiredRoleType">
		<xs:complexContent>
			<xs:extension base="tns:AbstractRequiredRoleType">
				<xs:attribute name="refInterface" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="RoleType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType">
				<xs:attribute name="name" type="tns:NameDataType" use="required"/>
				<xs:attribute name="levelUp" type="xs:string" use="optional"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="SinkRoleType">
		<xs:complexContent>
			<xs:extension base="tns:AbstractProvidedRoleType">
				<xs:attribute name="refEventGroup" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="SourceRoleType">
		<xs:complexContent>
			<xs:extension base="tns:AbstractRequiredRoleType">
				<xs:attribute name="refEventGroup" type="xs:string"/>
			</xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="SystemCallType">
		<xs:complexContent>
			<xs:extension base="tns:EntityType"/>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="SystemType">
		<xs:complexContent>
			<xs:extension base="tns:CompositeComponentType"> </xs:extension>
		</xs:complexContent>
	</xs:complexType>
	<xs:complexType name="SystemUsageType">
		<xs:sequence>
			<xs:element name="SystemCall" type="tns:SystemCallType" minOccurs="0"
				maxOccurs="unbounded"/>
		</xs:sequence>
		<xs:attribute name="refSystem" type="xs:string" use="required"/>
	</xs:complexType>
</xs:schema>
